package csu.web.credit_bank.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import csu.web.credit_bank.pojo.Resource;
import com.baomidou.mybatisplus.extension.service.IService;
import csu.web.credit_bank.pojo.vo.ResourceVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface ResourceService extends IService<Resource> {
    /**
     * @param file 资源主文件
     * @param coverImage 封面图片文件 (可以为null)
     * @param resource 资源元数据对象
     * @return 创建并保存后的资源对象
     */
    Resource createResourceWithUpload(MultipartFile file, MultipartFile coverImage, Resource resource);

    /**
     * 删除资源，包括数据库记录和OSS上的文件
     * @param id 资源ID
     * @return 是否删除成功
     */
    boolean deleteResource(String id);

    /**
     * @param page 分页参数
     * @param major 专业 (可选)
     * @param category 类别 (可选)
     * @param difficulty 难度 (可选)
     * @param keyword 标题关键字 (可选)
     * @param sort 排序规则
     * @return 资源分页结果
     */
    IPage<ResourceVO> searchResources(Page<Resource> page, String major, Integer category, Integer difficulty, String keyword, String sort);

    /**
     * @param id 资源ID
     * @param file 新的上传文件
     * @return 更新后的资源对象
     */
    Resource updateResourceFile(String id, MultipartFile file);

    /**
     * @param userId 用户ID
     * @param page 分页参数
     * @return 推荐的资源分页结果
     */
    IPage<ResourceVO> getPersonalizedRecommendations(String userId, Page<ResourceVO> page);

    /**
     * 创建一条资源记录，但不处理文件上传。
     * 用于数据填充或关联一个已存在的URL。
     * @param resource 包含所有信息的资源对象
     * @return 创建后的资源对象
     */
    Resource createResourceRecord(Resource resource);

    /**
     * @param id 资源ID
     * @return 包含作者名的ResourceVO对象，如果找不到则返回null
     */
    ResourceVO getResourceVOById(String id);

    IPage<ResourceVO> searchResources(Page<Resource> page, QueryWrapper<Resource> queryWrapper);


}